package blueBridge;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Main03 {

    static InOut1 io = new InOut1();
    String str;
    char[] chs;
    Operate[] op;
    
    
    private Main03(String str, Operate[] op) {
        this.str = str;
        this.op = op;
        chs = str.toCharArray();
    }
    
    private String takeOperation() {
        long[] offset = new long[str.length()+1];
        long[] diff = new long[str.length()+1];
        for (int i = 0; i < op.length; i++) {
            diff[op[i].l-1] += op[i].k;
            diff[op[i].r] -= op[i].k;
        }
        offset[0] = diff[0];
        for (int i = 1; i < offset.length; i++) {
            offset[i] = offset[i-1] + diff[i];
        }
        for (int i = 0; i < chs.length; i++) {
            chs[i] = (char) (97 + ((long)chs[i] - 97 + offset[i]) % 26);
        }
        str = new String(chs);
        return str;
    }

    public static void main(String[] args) {
        int n = io.nextInt();
        int q = io.nextInt();
        String str = io.next();
        Operate[] ops = new Operate[q];
        for (int i = 0; i < q; i++) {
            ops[i] = new Operate(io.nextInt(), io.nextInt(), io.nextInt());
        }
        Main03 m = new Main03(str, ops);
        io.out.println(m.takeOperation());
        io.out.flush();
    }

}
class Operate {
    int l, r, k;

    Operate(int l, int r, int k) {
        super();
        this.l = l;
        this.r = r;
        this.k = k;
    }
    
}
class InOut1 {
    BufferedReader br;
    StringTokenizer tok;
    PrintWriter out;
    public InOut1() {
        br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(new OutputStreamWriter(System.out)); 
    }
    public boolean hasNext() {
        while (tok == null || !tok.hasMoreElements()) {
            try {
                tok = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                return false;
            }
        }
        return true;
    }
    public String next() {
        if (hasNext()) {
            return tok.nextToken();
        }
        return null;
    }
    public int nextInt() {
        return Integer.parseInt(next());
    }
}
